<?php

namespace app\admin\controller;

use think\Controller;

//引入验证码插件类
use think\captcha\Captcha;

class Index extends Controller
{
    //默认后台首页
    public function index()
    {
        $AutoLogin = cookie('AutoLogin') ? cookie('AutoLogin') : '';
        $Login = session('?LoginUser') ? json_decode(session('LoginUser'), true) : [];

        if (!empty($AutoLogin)) {
            //有勾选自动登录
            $list = model('Admin')->where(['state' => 1])->select();

            //找到的人
            $auto = [];

            foreach ($list as $item) {
                $AutoSalt = md5($item['id'] . $item['username']);

                //如果相等说明 找到了自动登录的那个人
                if ($AutoSalt == $AutoLogin) {
                    $auto = $item;
                    break;
                }
            }

            //为空说明没找到自动登录的人
            if (empty($auto)) {
                //删除cookie
                cookie('AutoLogin', null);
            } else {
                //不为空说明找到了自动登录的人
                $result = login($auto);

                if ($result) {
                    $this->LoginUser = $auto;
                    $this->view->assign('LoginUser', $this->LoginUser);
                } else {
                    //登录失败
                    cookie('AutoLogin', null);
                    session(null);
                    $this->error('登录失败', url('admin/index/login'));
                    exit;
                }
            }
        } else {
            //没有勾选自动登录
            if (empty($Login)) {
                $this->error('请先登录', url('admin/index/login'));
                exit;
            }

            //判断管理员id 是否为空
            $adminid = (isset($Login['id']) && !empty($Login['id'])) ? $Login['id'] : 0;

            //查询用户是否存在
            $this->LoginUser = model('Admin')->find($adminid);

            if (!$this->LoginUser) {
                //伪造的session要删除,清除全部session
                session(null);
                $this->error('非法登录', url('admin/index/login'));
                exit;
            }

            $this->view->assign('LoginUser', $this->LoginUser);
        }

        return $this->view->fetch();
    }

    //登录界面
    public function login()
    {
        $AutoLogin = cookie('AutoLogin') ? cookie('AutoLogin') : '';
        $Login = session('?LoginUser') ? json_decode(session('LoginUser'), true) : [];

        if (!empty($AutoLogin)) {
            //有勾选自动登录
            $list = model('Admin')->where(['state' => 1])->select();

            //找到的人
            $auto = [];

            foreach ($list as $item) {
                $AutoSalt = md5($item['id'] . $item['username']);

                //如果相等说明 找到了自动登录的那个人
                if ($AutoSalt == $AutoLogin) {
                    $auto = $item;
                    break;
                }
            }

            //为空说明没找到自动登录的人
            if (empty($auto)) {
                //删除cookie
                //登录失败
                cookie('AutoLogin', null);
                session(null);
                $this->error('自动登录失败', url('admin/index/login'));
                exit;
            } else {
                //不为空说明找到了自动登录的人
                $result = login($auto);

                if ($result) {
                    $this->success('您已登录，无须重复登录', url('admin/index/index'));
                } else {
                    //登录失败
                    cookie('AutoLogin', null);
                    session(null);
                    $this->error('登录失败', url('admin/index/login'));
                    exit;
                }
            }
        } else {
            //判断是否有session
            if (!empty($Login)) {
                //判断管理员id 是否为空
                $adminid = (isset($Login['id']) && !empty($Login['id'])) ? $Login['id'] : 0;

                //查询用户是否存在
                $LoginUser = model('Admin')->find($adminid);

                if (!$LoginUser) {
                    //伪造的session要删除,清除全部session
                    cookie('AutoLogin', null);
                    session(null);
                    $this->error('非法登录', url('admin/index/login'));
                    exit;
                } else {
                    $this->success('您已登录，无须重复登录', url('admin/index/index'));
                    exit;
                }
            }
        }

        if ($this->request->isPost()) {
            //验证码
            $vercode = $this->request->param('vercode', '');
            $username = $this->request->param('username', '');
            $password = $this->request->param('password', '');
            $auto = $this->request->param('auto', false);

            //验证码不正确
            if (!captcha_check($vercode)) {
                $this->error('验证码填写有误，请重新填写');
                exit;
            }

            $admin = model('Admin')->where(['username' => $username])->find();

            //判断是否能够找到用户
            if (!$admin) {
                $this->error('管理员不存在');
                exit;
            }

            //判断密码是否正确
            $salt = $admin['salt'];
            $password = md5($password . $salt);

            if ($password != $admin['password']) {
                $this->error('管理员密码不正确');
                exit;
            }

            //判断管理员是否被禁用了
            if ($admin['state'] == 0) {
                $this->error('管理员已被禁用');
                exit;
            }

            //判断是否有自动登录
            if ($auto) {
                //自动登录盐
                $AutoSalt = md5($admin['id'] . $admin['username']);

                //存放到cookie 中
                cookie('AutoLogin', $AutoSalt, time() + 5 * 24 * 3600);
            }

            //将登录信息存到session里面 admin/common.php
            $result = login($admin);

            if ($result) {
                $this->success('登录成功', url('admin/index/index'));
                exit;
            } else {
                $this->error('登录失败');
                exit;
            }
        }

        //临时管理模板布局
        $this->view->engine->layout(false);

        return $this->view->fetch();
    }

    //退出登录
    public function logout()
    {
        //删除cookie和session
        cookie('AutoLogin', null);
        session('LoginUser', null);

        $this->success('退出成功', url('admin/index/login'));
        exit;
    }

    //生成验证码方法
    public function vercode()
    {
        //配置选项
        $config = [
            //使用中文验证码
            // 'useZh' => true,

            //设置长度
            'length' => 4
        ];
        //生成验证码
        $captcha = new Captcha($config);

        return $captcha->entry();
    }
}
